/**
 * AI配置管理
 * 负责API密钥的安全存储和读取
 */

import { AIConfig, AIErrorCode } from './types'
import { OpenAIClient } from './openaiClient'
import type { AIResult } from './types'

const AI_CONFIG_KEY = 'rmzf:config:ai'

/**
 * 简单的混淆加密（非安全加密，仅防止明文存储）
 */
function simpleEncrypt(text: string): string {
  return btoa(text)
}

/**
 * 简单的解密
 */
function simpleDecrypt(encrypted: string): string {
  return atob(encrypted)
}

/**
 * 保存AI配置
 */
export function saveAIConfig(config: AIConfig): void {
  try {
    const encrypted = simpleEncrypt(JSON.stringify(config))
    localStorage.setItem(AI_CONFIG_KEY, encrypted)
    console.log('[AI配置] 配置已保存')
  } catch (error) {
    console.error('[AI配置] 保存失败', error)
    throw new Error('保存AI配置失败')
  }
}

/**
 * 获取AI配置
 */
export function getAIConfig(): AIConfig | null {
  try {
    const encrypted = localStorage.getItem(AI_CONFIG_KEY)
    if (!encrypted) {
      return null
    }

    const decrypted = simpleDecrypt(encrypted)
    const config = JSON.parse(decrypted) as AIConfig
    // 移除日志输出,避免频繁打印
    return config
  } catch (error) {
    console.error('[AI配置] 读取失败', error)
    return null
  }
}

/**
 * 删除AI配置
 */
export function clearAIConfig(): void {
  localStorage.removeItem(AI_CONFIG_KEY)
  console.log('[AI配置] 配置已清除')
}

/**
 * 检查是否已配置API密钥
 */
export function hasAPIKey(): boolean {
  const config = getAIConfig()
  return !!(config && config.apiKey)
}

/**
 * 获取默认AI配置
 */
export function getDefaultAIConfig(): Omit<AIConfig, 'apiKey'> {
  return {
    model: 'gpt-3.5-turbo',
    temperature: 0.7,
    maxTokens: 500
  }
}

/**
 * 测试AI配置连接
 */
export async function testAIConnection(config: AIConfig): Promise<AIResult<{ model: string; message: string }>> {
  try {
    console.log('[AI配置] 测试连接', {
      baseURL: config.apiBaseUrl,
      model: config.model
    })

    const client = new OpenAIClient({
      apiKey: config.apiKey,
      baseURL: config.apiBaseUrl,
      model: config.model,
      timeout: 10000 // 测试连接使用较短超时
    })

    return await client.testConnection()
  } catch (error) {
    console.error('[AI配置] 测试连接异常', error)
    return {
      ok: false,
      error: {
        code: AIErrorCode.UNKNOWN,
        message: '连接测试失败'
      }
    }
  }
}

/**
 * 获取可用模型列表
 */
export async function getAvailableModels(config: Pick<AIConfig, 'apiKey' | 'apiBaseUrl'>): Promise<AIResult<Array<{ id: string; object: string; created: number }>>> {
  try {
    console.log('[AI配置] 获取模型列表')

    const client = new OpenAIClient({
      apiKey: config.apiKey,
      baseURL: config.apiBaseUrl,
      timeout: 10000
    })

    return await client.getModels()
  } catch (error) {
    console.error('[AI配置] 获取模型列表异常', error)
    return {
      ok: false,
      error: {
        code: AIErrorCode.UNKNOWN,
        message: '获取模型列表失败'
      }
    }
  }
}

/**
 * 获取用户信息(余额等)
 */
export async function getUserBalance(config: Pick<AIConfig, 'apiKey' | 'apiBaseUrl'>): Promise<AIResult<{ balance: string; totalBalance: string }>> {
  try {
    console.log('[AI配置] 获取用户余额')

    const client = new OpenAIClient({
      apiKey: config.apiKey,
      baseURL: config.apiBaseUrl,
      timeout: 10000
    })

    return await client.getUserInfo()
  } catch (error) {
    console.error('[AI配置] 获取用户余额异常', error)
    return {
      ok: false,
      error: {
        code: AIErrorCode.UNKNOWN,
        message: '获取用户余额失败'
      }
    }
  }
}
